package company.huawei.pro;

import java.util.ArrayList;
import java.util.List;

/**
 * @author LiangMu
 * @version \$Id: Main2.java, v 0.1, 2022年08月10日 3:36 下午 LiangMu Exp $$
 */
public class Main2 {
    /**
     * 有一种压缩算法，对int数组进行压缩，对于连续重复的数字，使用[number,count]来表达,将数组压缩为一个二维数组。
     * 例如[1,2,2,2,3,3,3,3],压缩为二维数组[[1,1],[2,3,],[3,4]]。
     * 现在要求实现一个功能，输入两个压缩后的二维数组A,B，要求将这两个二维数组解压，得到两个int数组a,b，然后根据这两个int数组，生成一个新的int数组c。
     * 规则是
     * c[i]=a[i]*b[i]
     * 如果a,b长度不一样，将更短的那个末尾通过追加0来补齐长度。
     * 最后将c压缩成为二维数组并输出。
     * 样例1：
     * 输入[[2,3],[5,3],[1,4],[3,3]],[[1,2],[7,1],[3,8]]
     * 输出[[2,2],[14,1],[15,3],[3,4],[9,1],[0,2]]
     * 样例2：
     * 输入[[3,3],[4,1]],	[[2,1],[4,2],[3,2]]
     * 输出[[6,1],[12,3],[0,1]]
     * 样例3：
     * 输入[[2,1000000],[3,1000000]],	[[7,999999],[8,2],[6,999999]]
     * 输出[[14,999999],[16,1],[24,1],[18,999999]]
     *
     * @param args
     */
    public static void main(String[] args) {
        int[][] a = {{2,3},{5,3},{1,4},{3,3}}; // --25551111   333] ai = index // ai asize = 3 -2 =1  ai++
        int[][] b = {{1,2},{7,1},{3,8}}; // [xxxxxxxxxx00000] 0 b1 ++1  = index bsize 2, 2 b size -= asize 14 bi++
        System.out.println(fun(a, b));
        System.out.println(fun(a, b));
    }

    public static List<int[]> fun(int[][] a, int[][] b) {
        List<int[]> res = new ArrayList<>();
        int b1 = 0;
        int alen = a.length;
        int blen = b.length;
        boolean mark = true;
        int asize = -1;
        int bsize;
        for (int i = 0; i < alen; ) {
            int num = a[i][0];
            if (mark) asize = a[i][1];
            int bnum = b[b1][0];
            bsize = b[b1][1];
            int i1 = num * bnum;
            if (asize > bsize) {
                int[] ints = {i1, bsize};
                res.add(ints);
                b1++;
                asize -= bsize;
                mark = false;
            } else if (asize == bsize) {
                int[] ints = {i1, asize};
                res.add(ints);
                b1++;
                i++;
                mark = true;
            } else {
                int[] ints = {i1, asize};
                res.add(ints);
                mark = true;
                i++;
            }
            if (b1 >= blen && bsize <= 0) {
                // 证明 b 走完了
                if (i >= alen) return res;
                int size = 0;
                if (asize >= 0) {
                    size += asize;
                }
                i++;
                for (int j = i; j < alen; ++j) {
                    size += a[j][1];
                }
                int[] ints = {0, size};
                res.add(ints);
                return res;
            }
        }
        return res;
    }

}
